/**
 * 数组扁平化处理，将数组降维，成为一维数组
 */

 //利用栈的特性进行扁平化处理
let flat1 = function(arr){
    let ans = [];
    let stack = [].concat(arr);//这样就不会改变arr中的数组了
    while(stack.length>0){
        let temp = stack.pop();
        if(Array.isArray(temp)){
    //若是数组，则将其中的元素入栈，这样层层下去，最里面的都是元素了
            stack.push(...temp);
        }else{
            ans.unshift(temp);
        }
    }
    return ans;
}

//利用toString()进行处理,这里返回的数组全是字符串类型的
let flat2 = function(arr){
    return arr.toString().split(',');
}

//常规方法，使用concat()的特性进行归并，concat()特点就是能将参数中的所有元素添加到调用的数组上
let flat3 = function(arr){
    let len = arr.length;
    let ans = [];
    for(let i = 0;i < len;i++){
        if(Array.isArray(arr[i])){
            ans = ans.concat(flat3(arr[i]));
        }else{
            ans.push(arr[i]);
        }
    }
    return ans;
}

//利用reduce()进行数组扁平化
let flat4 = function(arr){
    return arr.reduce((prev,cur,curIndex,arr)=>{
        return Array.isArray(cur)?prev.concat(flat4(cur)):prev.concat(cur);
    },[])
}



let arr = [1,2,3,[1,2,[1,1,3]]];
console.log(flat4(arr))